草庐IT

c++ - C++中static的含义

全部标签

c++ - 我什么时候在 C++ 中使用 const volatile、register volatile、static volatile?

我想知道volatile关键字与register、const和static结合的不同用途关键词。我不确定有什么影响,所以我认为:registervolatileintT=10;建议编译器将T存储在寄存器中,T的值可以从外部某处(操作系统、硬件、另一个线程)修改constvolatileintT=10;程序本身不能修改T,但是T可以在代码之外的地方修改。staticvolatileintT=10;如果T是类的数据成员,则意味着该类的所有对象都具有相同的T值,并且T可以从外部某处修改。如果T是文件中的全局变量,则其他文件(属于项目的一部分)中的源代码无法访问T,但可以从外部某处访问T。如果

c++ - 我在哪里将常量字符串放在 C++ : static class members or anonymous namespaces? 中

我需要定义一些仅由一个类使用的常量字符串。看起来我有三个选择:将字符串直接嵌入到使用它们的位置。将它们定义为类的私有(private)静态常量成员://A.hclassA{private:staticconststd::stringf1;staticconststd::stringf2;staticconststd::stringf3;};//A.cppconststd::stringf1="filename1";conststd::stringf2="filename2";conststd::stringf3="filename3";//stringsareusedinthisfil

c++ - static_cast<T>(-1) 是在没有 numeric_limits 的情况下生成全一位数据的正确方法吗?

我在一个无法访问C++标准库的环境中编写C++代码,特别是无法访问std::numeric_limits.假设我要实现templateconstexprTall_ones(/*...*/)专注于无符号整数类型,我该放什么?具体来说,是static_cast(-1)够好了?(根据我猜的大小,我可以将其他类型视为无符号字符数组。) 最佳答案 使用bitwiseNOT接线员~在0.TallOnes=~(T)0;一个static_cast(-1)假定二进制补码,这是不可移植的。如果您只关心无符号类型,hvd'sanswer是要走的路。工作示

c++ - 为什么使用具有特殊含义的覆盖和最终标识符而不是保留关键字?

overridespecifier和finalspecifier在C++11中添加。它们不同于添加到C++11的其他说明符,例如constexpr和decltype,因为它们不是keywords因此可用作标识符:intmain(){intoverride=0;//Okintfinal=0;//Ok//intconstexpr=0;//Error}它们被称为具有特殊含义的标识符,在草案C++11标准部分2.11[lex.name](强调我的):TheidentifiersinTable3haveaspecialmeaningwhenappearinginacertaincontext.W

c++ - initializer_list::size() 上的 static_assert

为什么是std::initializer_list::size不允许在static_assert中使用,即使它被声明为constexpr在我的libstdc++(v.4.6)中?例如下面的代码:templateclassPoint{public:Point(std::initializer_listinit){static_assert(init.size()==Length,"Wrongnumberofdimensions");}};intmain(){Pointq({1,2,3});return0;}给出以下错误:test.C:Inconstructor‘Point::Point(

c++ - 警告 : ISO C++ forbids converting a string constant to ‘char*’ for a static `constexpr char*` data member

这个问题在这里已经有了答案:constexprconstvsconstexprvariables?(3个回答)关闭3年前。为什么这段代码会返回警告warning:ISOC++forbidsconvertingastringconstantto‘char*’[-Wwrite-strings]如果Aconstexprspecifierusedinanobjectdeclarationornon-staticmemberfunction(untilC++14)impliesconst.Aconstexprspecifierusedinafunctionorstaticmembervariab

mongodb - 就组而言,美元符号在 mongodb 中的含义是什么?

根据文档,“$”是为运算符(operator)保留的。但是,如果您查看组运算符,则值需要以美元为前缀。这些值不是运算符。那么在这种情况下是什么意思呢?示例如下:db.article.aggregate({$group:{_id:"$author",docsPerAuthor:{$sum:1},viewsPerAuthor:{$sum:"$pageViews"}}});为什么pageViews需要一个前导美元符号?我在本地试过了,没有美元符号就不行。 最佳答案 在这种情况下,“$string”表示您要使用已处理文档中名为“string

mongodb - 就组而言,美元符号在 mongodb 中的含义是什么?

根据文档,“$”是为运算符(operator)保留的。但是,如果您查看组运算符,则值需要以美元为前缀。这些值不是运算符。那么在这种情况下是什么意思呢?示例如下:db.article.aggregate({$group:{_id:"$author",docsPerAuthor:{$sum:1},viewsPerAuthor:{$sum:"$pageViews"}}});为什么pageViews需要一个前导美元符号?我在本地试过了,没有美元符号就不行。 最佳答案 在这种情况下,“$string”表示您要使用已处理文档中名为“string

c++ - 复杂 C 语法的含义

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:WhatdoesthisCstatementmean?这个表达是什么意思?char*(*c[10])(int**p); 最佳答案 c是一个由10个函数指针组成的数组,它们返回一个char*并将int**作为参数。(*c[10])^^^^=arrayof10(*c[10])^=functionpointer所以现在我们有一个包含10个函数指针的数组。char*(*c[10])^^^^^^=returnsachar*char*(*c[10])(int**p)^

c++ - 即使模板函数在任何地方都没有调用,static_assert 也无法编译

我使用带有标志c++0x的g++4.6.3(当前是ubuntu12.04的默认包),我偶然发现了这个:templateinlineTgetValue(AnObject&){static_assert(false,"thisfunctionhastobeimplementedfordesiredtype");}编译错误:static_assertionfailed"thisfunctionhastobeimplementedforthedesiredtype"即使我还没有在任何地方调用此函数。这是一个g++错误吗?仅当在代码中的某处调用此函数时才应实例化此函数。